
(function($){

$.fn.validatie = function(elementen)
{
	var geldig = true;
	
	$('.validatieFoutBoodschap').remove();
	
	for (var el in elementen)
	{
		if (!$.fn.validatie.element(el,elementen[el]))
		{
			geldig = false;	
		}
	}
	
	return geldig;
};

$.fn.validatie.element = function(el,regels)
{
	var regels = regels.split(',');
	if (regels.length == 0)
		return true;
	
	var elGegevens = $.fn.validatie.type(el);	
	
	for (var i in regels)
	{
		regel = regels[i];
                
		if (!$.fn.validatie.regels[regel].test(elGegevens))
		{
			var p = $('<p>').addClass('validatieFoutBoodschap')
			                .text($.fn.validatie.regels[regel].boodschap);	
							
			$(elGegevens.object).closest('p').after(p);
			
			return false;
		}
	}
	
	return true;
};

$.fn.validatie.type = function(el)
{
	var resultaat = {el: el,
	                 object: null,
					 tag: '',
					 type: ''};
					 
	if ($('#' + resultaat.el).length > 0)
	{
		resultaat.object = $('#' + resultaat.el);
	}
	else if ($('[name="' + resultaat.el + '"]').length > 0)
	{
		resultaat.object = $('[name="' + resultaat.el + '"]');
	}
	
	if (resultaat.object != null)
	{
		resultaat.tag = resultaat.object.get(0).tagName.toLowerCase();
		if (resultaat.tag === 'input')
		{
			resultaat.type = $(resultaat.object).attr('type').toLowerCase();	
		}
	}
	
	return resultaat;
};

$.fn.validatie.regels = 
{
	verplicht: {
		boodschap: 'verplicht veld',
		test: function(elGegevens)
		{
			var resultaat = false;
			
			if (elGegevens.tag === 'input')
			{
				if (elGegevens.type === 'text' || elGegevens.type === 'password')
				{
					if ($.trim($(elGegevens.object).val()).length > 0)
					{
						resultaat = true;	
					}
				}
				else if (elGegevens.type === 'radio' || elGegevens.type === 'checkbox')
				{
					if ($('[name="' + elGegevens.el + '"]:checked').length > 0)
					{
						resultaat = true;	
					}
				}
			}
			else if (elGegevens.tag === 'textarea')
			{
				if ($.trim($(elGegevens.object).val()).length > 0)
				{
					resultaat = true;	
				}
			}
			else if (elGegevens.tag === 'select')
			{
				if ($.trim($(elGegevens.object).find('option:selected').val()).length > 0)
				{
					resultaat = true;	
				}		
			}
			
			return resultaat;
		}
	},
	letters: {
		boodschap: 'enkel letters toegelaten',
		test: function(elGegevens)
		{
			var resultaat = false;
			
			if (elGegevens.type === 'text' || elGegevens.tag === 'textarea')
			{
				var tekst = $.trim($(elGegevens.object).val());
				resultaat = /^[a-z ']*$/i.test(tekst);
			}
			else
			{
				resultaat = true;
			}
			
			return resultaat;
		}
	},
	datum: {
		boodschap: 'datum moet in formaat dd-mm-jjjj staan',
		test: function(elGegevens)
		{
			var resultaat = false;
			
			if (elGegevens.type === 'text' || elGegevens.tag === 'textarea')
			{
				var tekst = $.trim($(elGegevens.object).val());
				resultaat = /^[0-3]?[0-9]{1}-[0-1]?[0-9]{1}-(19|20)[0-9]{2}$/i.test(tekst);
			}
			else
			{
				resultaat = true;
			}
			
			return resultaat;
		}
	},
	email: {
		boodschap: 'ongeldig email',
		test: function(elGegevens)
		{
			var resultaat = false;
			
			if (elGegevens.type === 'text' || elGegevens.tag === 'textarea')
			{
				var tekst = $.trim($(elGegevens.object).val());
				resultaat = /^[a-z0-9_]+[_a-z0-9!\$#%&\*\+\{\}\|-]*(\.[_a-z0-9!\$#%&\*\+\{\}\|-]+)*@[a-z0-9]+(\.[a-z0-9]+)+[a-z0-9]{1,5}$/i.test(tekst);
			}
			else
			{
				resultaat = true;
			}
			
			return resultaat;
		}
	}
};
})(jQuery)